package com.biglead.admin.service.impl;

import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biglead.admin.mapper.*;
import com.biglead.admin.param.AdminProductCategoryParam;
import com.biglead.admin.param.PmsProductAttributeParam;
import com.biglead.admin.pojo.*;
import com.biglead.admin.service.PmsProductAttributeService;
import com.biglead.admin.service.PmsProductCategoryService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service("productAttributeService")
public class PmsProductAttributeServiceImpl extends ServiceImpl<PmsProductAttributeMapper, PmsProductAttribute> implements PmsProductAttributeService {

    @Autowired
    private ProductAttributeCategoryMapper productAttributeCategoryMapper;
    @Autowired
    private PmsProductAttributeMapper pmsProductAttributeMapper;
    @Override
    public Page<PmsProductAttribute> getList(Long cid, Integer type, Integer pageSize, Integer pageNum) {
        Page<PmsProductAttribute> page = Page.of(pageNum, pageSize);
        //queryWrapper组装查询where条件
        LambdaQueryWrapper<PmsProductAttribute> queryWrapper = new LambdaQueryWrapper<>();
        //查询条件 parentId
        queryWrapper.like(cid != null, PmsProductAttribute::getProductAttributeCategoryId, cid);
        queryWrapper.like(type != null, PmsProductAttribute::getType, type);
        //发起查询
        this.page(page, queryWrapper);
        return page;
    }

    @Override
    public boolean create(PmsProductAttributeParam productAttributeParam) {
        PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
        BeanUtils.copyProperties(productAttributeParam, pmsProductAttribute);

        //保存
        this.save(pmsProductAttribute);

        //新增商品属性以后需要更新商品属性分类数量
        PmsProductAttributeCategory pmsProductAttributeCategory = productAttributeCategoryMapper.selectById(pmsProductAttribute.getProductAttributeCategoryId());

        if (pmsProductAttributeCategory != null) {
            if (pmsProductAttribute.getType() == 0) {
                pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount() + 1);
            } else if (pmsProductAttribute.getType() == 1) {
                pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount() + 1);
            }
            productAttributeCategoryMapper.updateById(pmsProductAttributeCategory);
        }

        return true;
    }

    @Override
    public boolean update(Long id, PmsProductAttributeParam productAttributeParam) {
        PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
        pmsProductAttribute.setId(id);
        BeanUtils.copyProperties(productAttributeParam, pmsProductAttribute);
        return this.updateById(pmsProductAttribute);
    }

    @Override
    public PmsProductAttribute getItem(Long id) {
        return this.getById(id);
    }

    @Override
    public boolean delete(List<Long> ids) {
        //获取分类
        PmsProductAttribute pmsProductAttribute = pmsProductAttributeMapper.selectById(ids.get(0));
        if(pmsProductAttribute==null){
            return false;
        }
        Integer type = pmsProductAttribute.getType();
        PmsProductAttributeCategory pmsProductAttributeCategory = productAttributeCategoryMapper.selectById(pmsProductAttribute.getProductAttributeCategoryId());
        int count = pmsProductAttributeMapper.delete(new LambdaQueryWrapper<PmsProductAttribute>().in(PmsProductAttribute::getId,ids));

        if(pmsProductAttributeCategory!=null) {
            //删除完成后修改数量
            if (type == 0) {
                if (pmsProductAttributeCategory.getAttributeCount() >= count) {
                    pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount() - count);
                } else {
                    pmsProductAttributeCategory.setAttributeCount(0);
                }
            } else if (type == 1) {
                if (pmsProductAttributeCategory.getParamCount() >= count) {
                    pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount() - count);
                } else {
                    pmsProductAttributeCategory.setParamCount(0);
                }
            }
            productAttributeCategoryMapper.updateById(pmsProductAttributeCategory);
        }

        return false;
    }

    @Override
    public List<ProductAttrInfo> getProductAttrInfo(Long productCategoryId) {
        return pmsProductAttributeMapper.getProductAttrInfo(productCategoryId);
    }
}
